package cn.walls1717.leetcode.array;

/**
 * 26. 删除有序数组中的重复项
 * 力扣地址：https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/
 *
 * @author walls1717
 * @since 2022-05-01
 **/
public class T26 {
    public static void main(String[] args) {
        int[] nums = {0, 0, 1, 1, 1, 2, 2, 3, 3, 4};
        int index = removeDuplicates(nums);
        for (int i = 0; i < index; i++) {
            System.out.print(nums[i]);
        }
    }

    public static int removeDuplicates(int[] nums) {
        // 设置快慢指针
        // 快指针直接从1开始，用来与慢指针对应的元素比较
        int fastIndex = 1;
        int slowIndex;

        for (slowIndex = 0; fastIndex < nums.length; ++fastIndex) {
            // 判断慢指针元素与快指针元素
            // 如果相同，快指针找下一个，直到不相同
            if (nums[slowIndex] != nums[fastIndex]) {
                // 将慢指针对应的下一个元素设置为快指针找到的不同数据
                nums[slowIndex + 1] = nums[fastIndex];
                // 慢指针向前移
                ++slowIndex;
            }
        }
        // 慢指针+1返回最后正确的数组大小
        return slowIndex + 1;
    }
}
